def train():
    param_distribution={
        'min_child_samples': np.arange(5,20), #它的值取决于训练数据的样本个树和num_leaves. 
                                                   #将其设置的较大可以避免生成一个过深的树, 但有可能导致欠拟合。
        # 'max_depth':np.arange(7,10) #设置树深度，深度越大可能过拟合
    }
    model_lgb = lgb.LGBMClassifier(learning_rate=0.01, min_child_samples=5,max_depth=9,
                                     lambda_l1=2,boosting="gbdt",objective="multiclass",
                                     n_estimators=2000,metric='multi_error',num_class=3,
                                     feature_fraction=0.75,bagging_fraction=0.85,seed=99,
                                     num_threads=20,verbose=-1,n_jobs=-1)
    # 随机搜索超参数
    gsearch = GridSearchCV(estimator=model_lgb,
                                      param_grid=param_distribution,
                                     scoring='neg_mean_squared_error',
                                      cv = 5,
                                      verbose=1,
                                      n_jobs = -1 #使用所有的CPU进行训练，默认为1，使用1个CPU
                                         ) 
    gsearch.fit(X_train,y_train)
    return gsearch

def train1():
    spark = (
        SparkSession
        .builder
        .getOrCreate()
        )
    sc = spark.sparkContext 
    param_grid={
#         'min_child_samples': np.arange(5,20), #它的值取决于训练数据的样本个树和num_leaves. 
#                                                    #将其设置的较大可以避免生成一个过深的树, 但有可能导致欠拟合。
        'learning_rate':[0.7] #设置树深度，深度越大可能过拟合
    }
    classifier = AdaBoostClassifier(DecisionTreeClassifier(max_depth=9, min_samples_split=20, min_samples_leaf=5),
                         algorithm="SAMME",
                         n_estimators=700, learning_rate=0.7)
    # 随机搜索超参数
    gsearch =DistGridSearchCV(classifier, param_grid, sc=sc, cv=5, scoring="f1_weighted",verbose=True)
    gsearch.fit(X_train,y_train)
    return gsearch